現在幾乎每天都會打開 Google Doc,但有時就是會有很多類似的文件,其實只要調整一點點東西,可能是薪資單、要交的報告、給客戶的企劃書(X)。總之,我們不時會需要「調整 Google Doc 中的一點點部分」,請問我們能怎麼做?
今天的主題是,每次要跟不同的廠商與單位簽 NDA,如果比較一般的合作,那就可以拿範本,但如果是比較深度的合作,老闆總會想要搞一點客製,那要怎麼簡單將這件事自動化呢?
今天只有一個問題,那我們就開始吧!
今天勤勞一點先把影片錄起,總之先開一個 Google Sheet 的並串接 GAS。
一樣在最一開始執行時會有「需要驗證」出現,讓我借用一下 D2 的影片。
關於創造文件,我們可以選擇複製範本(像是 D11 複製並客製你的 Google Form),或是創造新的文件(像是 D12 幅度客製你的 Google Form);這次我會針對複製「新文件」來做介紹,也就是 D12 的那種版本。那我們要長出什麼樣子呢?這邊先給大家看我們的參數們。
這邊我們簡單設定了三個參數 Name(文件的名字)、Header 和 Footer。
為什麼選這些參數呢?因為每一份 Google Doc 其實都有這樣的架構。分別是文章內部的 Header、Body、Footer;以及額外的 Url、Name 和 Id。來讓我們看一下一份 Google Docs 的架構——
今天我們會主要講結構的 Header
、Footer
和 Body
怎麼抓,待因為抓入每一個結構,內步的調整就會包含很多客製化的部分,我會於明天另外以完整的篇幅介紹。
那一樣我們要先讀取表單內的資料,透過老朋友 readSheetData()
來完成。這邊不懂可以參照 D11 和 D4。
function readSheetData(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet();
let start_row = 2;
let start_col = 1;
let numRows = sheet.getLastRow() - start_row +1;
let numCols = sheet.getLastColumn() - start_col +1;;
let values = sheet.getRange(start_row,start_col,numRows,numCols).getValues();
Logger.log(values);
return values;
}
讓我們來看一下跑起來的畫面——
DocumentApp.create()
來創造文件好,那接著就要創造文件了。這邊我們會用到兩個功能,分別是 moveFile()
和 DocumentApp.create()
。
首先 moveFile()
的執行細節在 D12 有講到,我們就快速看過程式碼。
function moveFile(fileId, destinationFolderId) {
let destinationFolder = DriveApp.getFolderById(destinationFolderId);
DriveApp.getFileById(fileId).moveTo(destinationFolder);
}
那新的 function 是 DocumentApp.create()
雖說是新的,但其實就是簡單地創造一個新的文件檔案。實際執行時,要抓出你要放在哪一個 folder,把 "your_id_here
換掉。
var target_folder_ID= "your_id_here";
function createDoc(file_name) {
let new_doc = DocumentApp.create(file_name);
let doc_id = new_doc.getId();
moveFile(doc_id, target_folder_ID)
}
我們來看一下跑起來長怎麼樣——
好,那我們現在已經能創造文件,現在要來看怎麼樣「寫入內容」。我們來看看程式碼先——
function createDoc() {
let new_doc = DocumentApp.create('D14 practice');
let doc_id = new_doc.getId();
moveFile(doc_id, target_folder_ID)
let header = new_doc.addHeader();
let footer = new_doc.addFooter();
new_doc.setName("Hi, Amy")
header.setText("Amy's NDA");
footer.setText("2021/09/14");
}
比較值得一提的是,在 Google Doc 中,「寫入內容」都是要——
先把結構叫出來,再針對結構進行調整
就是下圖這樣,都是要先叫出 Object。
像是其中這段, header
是結構,再用 setText()
設定文字。
let header = new_doc.addHeader();
header.setText("Amy's NDA");
跑起來長這樣——
好,那看來有...
setName
改到名稱header.setText
有改到 headerfooter.setText
有改到 footer接著,就是大量製作了!
這邊我們先將原本的 createDoc()
改為可以輸入參數,分別是我們最一開始資料的 name
、 header_text
和 footer_text
。換句話說,如果我們想創造和 Step 5 一樣的文件,就要改成輸入 createDoc("Hi! Amy", "Amy's NDA", "20210914")
即可。
function createDoc(name, header_text, footer_text) {
let new_doc = DocumentApp.create('D14 practice');
let doc_id = new_doc.getId();
moveFile(doc_id, target_folder_ID)
let header = new_doc.addHeader();
let footer = new_doc.addFooter();
new_doc.setName(name)
header.setText(header_text);
footer.setText(footer_text);
}
function createDocsFromSheet(){
let data = readSheetData();
for (row_data of data){
let name = row_data[0];
let header_text = row_data[1];
let footer_text = row_data[2];
Logger.log(name+ " "+ header_text + " "+ footer_text);
createDoc(name, header_text, footer_text);
}
}
我們另外再創造一個 createDocsFromSheet()
把 Sheet 裡面的資料解構,並輸入上面那個 createDoc()
當中。這邊要注意的是,如
最後跑起來長這樣——
好,那今天就是我們的 D14。提醒的是,創造文件有 Quota 限制——每天不超過 250 件。明天我會介紹當有很多文件要產出時,內部細節到底要怎麼寫。
如果還有問題,透過留言之外,也可以到 Facebook Group,想開很久這次鐵人賽才真的開起來哈哈哈,歡迎來當 Founding Member。如果不想錯過可以訂閱按讚小鈴鐺(?),也歡迎留言跟我說你還想知道什麼做法/主題。我們明天見。